import { useState, useEffect } from 'react';
import { UserType } from '../types/user';

// 默认用户数据
const DEFAULT_USER: UserType = {
  id: '1',
  name: '旅行爱好者',
  email: 'traveler@example.com',
  avatar: 'https://via.placeholder.com/150',
  bio: '热爱旅行和探索不同文化',
  location: '北京',
  language: 'zh',
  preferences: {
    notifications: true,
    theme: 'light',
    mapType: 'standard'
  },
  createdAt: new Date().toISOString()
};

// 个人资料服务钩子
const useProfileService = () => {
  const [user, setUser] = useState<UserType | null>(null);
  const [isLoading, setIsLoading] = useState(true);
  const [error, setError] = useState<string | null>(null);

  // 从本地存储加载用户数据
  useEffect(() => {
    try {
      setIsLoading(true);
      const storedUser = localStorage.getItem('user');
      if (storedUser) {
        setUser(JSON.parse(storedUser));
      } else {
        // 如果没有存储的用户数据，使用默认用户
        setUser(DEFAULT_USER);
        localStorage.setItem('user', JSON.stringify(DEFAULT_USER));
      }
      setIsLoading(false);
    } catch (err) {
      setError('加载用户数据失败');
      setIsLoading(false);
      console.error('Failed to load user data:', err);
    }
  }, []);

  // 更新用户资料
  const updateProfile = (updatedData: Partial<UserType>) => {
    if (!user) return;

    try {
      const newUser = { ...user, ...updatedData };
      setUser(newUser);
      localStorage.setItem('user', JSON.stringify(newUser));
      return true;
    } catch (err) {
      setError('更新用户数据失败');
      console.error('Failed to update user data:', err);
      return false;
    }
  };

  // 更改用户语言
  const changeLanguage = (language: string) => {
    return updateProfile({ language });
  };

  // 上传头像
  const uploadAvatar = (file: File) => {
    // 这里只是模拟上传，实际项目中应该调用API
    return new Promise<string>((resolve, reject) => {
      if (!file) {
        reject('没有选择文件');
        return;
      }

      // 检查文件类型
      if (!file.type.startsWith('image/')) {
        reject('请上传图片文件');
        return;
      }

      // 模拟上传延迟
      setTimeout(() => {
        // 生成一个模拟的图片URL
        const reader = new FileReader();
        reader.onloadend = () => {
          const imageUrl = reader.result as string;
          updateProfile({ avatar: imageUrl });
          resolve(imageUrl);
        };
        reader.readAsDataURL(file);
      }, 1000);
    });
  };

  // 删除账户（模拟）
  const deleteAccount = () => {
    try {
      localStorage.removeItem('user');
      setUser(null);
      return true;
    } catch (err) {
      setError('删除账户失败');
      console.error('Failed to delete account:', err);
      return false;
    }
  };

  return {
    user,
    isLoading,
    error,
    updateProfile,
    changeLanguage,
    uploadAvatar,
    deleteAccount
  };
};

export default useProfileService;